const electron = require('electron')
// Module to control application life.
const app = electron.app
// Module to create native browser window.
const BrowserWindow = electron.BrowserWindow
/// Menu bar
const Menu = electron.Menu;
const fs = require('fs');
const path = require('path');
const marked = require('marked');
const hljs = require('highlight.js');



// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow


function createSubDialog(title, width, height, filePath)
{

  const extension = path.extname(filePath);
  
  let dialog = new BrowserWindow({
      width: width,
      height: height,
      resizable: false,
      icon: 'favicon.ico',
      title: title,
      autoHideMenuBar: true,
      webPreferences: {
        nodeIntegration: true,
      },
  });

  // 读取 Markdown 文件
  if ('.md' == extension) {
    fs.readFile(filePath, 'utf8', (err, data) => {

        if (err) {
            console.error(err);
            return;
        }

        // 使用 marked 和 highlight.js 转换 Markdown 为 HTML
        const html = marked.parse(data, {
          highlight: function (code) {
            return hljs.highlightAuto(code).value;
          },
        });

        // 在 Electron 窗口中显示转换后的 HTML
        dialog.loadURL(`data:text/html,${html}`);
    });
  } else {
    
     dialog.loadURL(`file://${__dirname}/` + filePath);
  }

}


function createWindow () {
    // Create the browser window.
    mainWindow = new BrowserWindow({
        width: 1680,
        height: 1080,
        resizable: false,
        icon: 'favicon.ico',
        autoHideMenuBar: false,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        },
    })

    /// empty the title
    mainWindow.setTitle('');

    // and load the index.html of the app.
    mainWindow.loadURL(`file://${__dirname}/index.html`)

    // Open the DevTools.
    // mainWindow.webContents.openDevTools()

    // Emitted when the window is closed.
    mainWindow.on('closed', function () {
        // Dereference the window object, usually you would store windows
        // in an array if your app supports multi windows, this is the time
        // when you should delete the corresponding element.
        mainWindow = null
    })

    /// About dialog in menu bar
    const template = [
        {
          label: 'Help',
          submenu: [
            {
              label: 'Change Log',
              click: () => {
                createSubDialog('Change Log', 480, 720, "Changelog.md");
              },
            },
            {
              label: 'About Us',
              click: () => {
                createSubDialog('About Us', 720, 540, "about.html");
              },
            },
          ],
        },
    ];
      
    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);

}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)

// Quit when all windows are closed.
app.on('window-all-closed', function () {
    // On OS X it is common for applications and their menu bar
    // to stay active until the user quits explicitly with Cmd + Q
    if (process.platform !== 'darwin') {
        app.quit()
    }
})

app.on('activate', function () {
    // On OS X it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (mainWindow === null) {
        createWindow()
    }
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

  